package io.gitee.caoxiaoyu97.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*********************************************************
 * 文件名称：URLUtils.java
 * 系统名称：cxycloud
 * 模块名称：io.gitee.caoxiaoyu97.messageconvert.util
 * 功能说明：URL工具类
 * 开发人员 @author：caoxy
 * 开发时间 @date：2023/7/17 15:56
 * 修改记录：程序版本  修改日期  修改人员  修改单号  修改说明
 *********************************************************/


public class URLUtils {
    /**
     * 获取URL下的指定子目录或子文件的URL
     *
     * @param url  URL对象
     * @param path 子目录或子文件名
     * @return URL对象
     */
    public static URL getSubUrl(URL url, String path) {
        String protocol = url.getProtocol();
        if ("file".equals(protocol)) {
            // 如果是文件系统路径
            return getSubUrlFromFile(url, path);
        } else if ("jar".equals(protocol)) {
            // 如果是JAR包
            return getSubUrlFromJar(url, path);
        } else {
            // 其他协议暂不支持
            throw new UnsupportedOperationException("Unsupported protocol: " + protocol);
        }
    }


    /**
     * 获取文件系统路径下的指定子目录或子文件的URL
     *
     * @param url  URL对象
     * @param path 子目录或子文件名
     * @return URL对象
     */
    private static URL getSubUrlFromFile(URL url, String path) {
        try {
            String urlString = url.toString();
            if (urlString.endsWith(File.separator)) {
                urlString += path;
            } else {
                urlString += File.separator + path;
            }
            URL subUrl = new URL(urlString);
            File subFile = new File(subUrl.getFile());
            if (subFile.exists()) {
                return subUrl;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 获取JAR包中的指定子目录或子文件的URL
     *
     * @param url  URL对象
     * @param path 子目录或子文件名
     * @return URL对象
     */
    private static URL getSubUrlFromJar(URL url, String path) {
        try {
            JarURLConnection connection = (JarURLConnection) url.openConnection();
            JarFile jarFile = connection.getJarFile();
            Enumeration<JarEntry> entries = jarFile.entries();
            while (entries.hasMoreElements()) {
                JarEntry entry = entries.nextElement();
                if (entry.getName().equals(path)) {
                    return new URL(url.toString() + "!/" + entry.getName());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
